import time
import unittest
from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.support.select import Select


class UnittestFireFoxDriver(unittest.TestCase):
    """
        driver 代表的是 浏览器 驱动对象
    """
    driver = None

    @classmethod
    def setUpClass(cls) -> None:
        cls.service = Service(executable_path='../day01/driver_exe/geckodriver.exe')
        cls.driver = webdriver.Firefox(service=cls.service)

    def test_element_double_click(self):
        """下拉式菜单容器的使用（Select）"""
        self.driver.get('file:///D:/SoftWare/testhtml/exam/House.html')

        # 操作 下拉列表框 有两种方式
        #     1、 想要选择下拉列表中的哪一个选项 只需要通过元素定位 点击即可
        self.driver.find_element(By.XPATH, "//option[@value='c']").click()

        #     2、如果不使用 第一种方式 ，可以选择使用 通过元素定位的方式 将 存放所有元素选项的容器获取出来进行操作
        list1 = self.driver.find_element(By.NAME, "list1")
        select = Select(list1)
        # 如果将 下拉列表框加入到 容器中 需要使用 容器中提供的方法来获得点击选中某一个选项
        # select.select_by_index(0)  # 通过 选项的索引值来选择  索引值 从 0 开始
        # select.select_by_value('b')  # 通过 选项的标签中的 value属性中的 值 来选择
        select.select_by_visible_text('办公用房')  # 通过 选项的text 的文本值来选择

    def test_element_is_true(self):
        """判断下拉式菜单中的选项"""
        self.driver.get('file:///D:/SoftWare/testhtml/exam/House.html')

        # 可以选择使用 通过元素定位的方式 将 存放所有元素选项的容器获取出来进行操作
        list1 = self.driver.find_element(By.NAME, "list1")
        select = Select(list1)

        var = select.is_multiple
        # 三元运算符   三目运算符
        result = '支持多选' if var else '不支持多选'
        print(result)

        # 预期值 和 实际值  比较   通过  失败
        # self.assertEqual()

        # 断言判断 如果某一个表达式的结果为 true  断言通过  否则失败
        # self.assertTrue(select.is_multiple)

        # 断言判断 如果某一个表达式的结果为 false  断言通过  否则失败
        self.assertFalse(select.is_multiple)
        print(self.driver.find_element(By.XPATH, "//option[@value='c']").text)

        # 获得容器中 选择了 哪些 选项
        print(select.all_selected_options[0].text)

        for e in select.options:
            print(e.text)



    @classmethod
    def tearDownClass(cls) -> None:
        # cls.driver.close()
        # cls.driver.quit()
        pass


if __name__ == '__main__':
    pass
